<?php 
HeaderScripts::addScripts(array(
	'admin/gridCellActions.js'
));
HeaderScripts::addStyles(array(
	'admin/grid.css'
));
?>
<div id="hotelgrid"></div>
<script type="text/javascript">
var hotelId = <?php echo $hotelId ?>;
var iframeUrl = '/admin/hotelrooms/index/id/' + hotelId + '/';

var store = null;
var grid  = null;
var win   = null;
var winAction  = null;
var winGroupId = null;
var winPanel   = null;
var winPanelName = null;
var firstOpen    = true;
var panelContent = null;
var datesForm;

Ext.onReady(function() {
	store = new Ext.data.GroupingStore({
		reader:new Ext.data.JsonReader({
			id: 'company',
			totalProperty: 'totalCount',
			root: 'hoteldates',
			fields:[
				{name: 'id'},
				{name: 'dateStart', type: 'date', dateFormat: 'Y-m-d'},
				{name: 'dateEnd', type: 'date', dateFormat: 'Y-m-d'},
				{name: 'group'},
				{name: 'groupId'},
				{name: 'action', type: 'string'}
			]
		}),
		proxy:new Ext.data.HttpProxy({url: '/admin/hoteldates/getdata/'}),
		groupField: 'group'
	});

	store.setDefaultSort('group', 'asc');

	var action = new Ext.ux.grid.RowActions({
		header:'Действия',
		width: 30,
		autoWidth:false,
		hideMode:'display',
		keepSelection:true,
		actions:[{
			iconIndex: 'action',
			iconCls: 'icon-delete-item',
			callback: function(grid, record, action, groupId) {
				deleteDate(record.data.id);
			}
		}],
		groupActions:[{
			iconCls: 'icon-delete-table',
			callback: function(grid, records, action, groupId) {
				if (records[0]) {
					deleteGroup(records[0].data.groupId);
				}
			}
		},{
			iconCls: 'icon-add-table',
			callback: function(grid, records, action, groupId) {
				if (records[0]) {
					winGroupId = records[0].data.groupId;
				}
				winAction = 'edit';
				win.setTitle('Добавить даты в колонку');
				win.show();
			}
		}]
	});

	panelContent = new Ext.Panel({
		region: 'center',
    	margins: '0 0 0 0',
    	autoScroll: true,
    	html: '<iframe id="winPanelId" name="winPanelName" style="overflow:auto; width:100%; height:99%;" frameborder="0" src="' + iframeUrl + '"></iframe>'
	});

    winPanel = new Ext.Window({
        title: 'Гостиница: <?php echo htmlspecialchars($hotel->title, ENT_QUOTES) ?> -  Номера и цены',
        closable: true,
        closeAction: 'hide',
        width: 1000,
        height: getClientHeight() > 800 ? 600 : getClientHeight(),
        border:false,
        plain: true,
        layout: 'border',
        items: [panelContent],
        buttons: [{
            text: 'Закрыть',
            handler: function(){
        		winPanel.hide();
            }
        }]
    });

	winPanel.on('beforeshow', function (obj) {
		Ext.get('msg-div-casper').slideIn();
	});
	
	winPanel.on('beforehide', function (obj) {
		Ext.get('msg-div-casper').slideOut();
	});

	grid = new Ext.grid.GridPanel({
        width: 600,
        height: 530,
        title: 'Гостиница: <?php echo htmlspecialchars($hotel->title, ENT_QUOTES) ?> - Группы дат',
        store: store,
        loadMask: {msg: 'Загрузка...'},
        plugins: [action],
        view: new Ext.grid.GroupingView({
			forceFit: true
		}),

        // grid columns
        columns:[{
            header: 'Дата 1',
            dataIndex: 'dateStart',
			align: 'left',
            sortable: true,
			width:100,
			xtype: 'datecolumn',
			format: 'd.m.Y',
			menuDisabled: true
        },{
            header: 'Дата 2',
            dataIndex: 'dateEnd',
			align: 'left',
            sortable: true,
			width: 100,
			xtype: 'datecolumn',
			format: 'd.m.Y',
			menuDisabled: true
        },{
            header: 'Колонка',
            dataIndex: 'group',
			align: 'left',
            sortable: true,
			hidden: true,
			menuDisabled: true
        }, action],
		
		tbar: [{
            text: 'Создать колонку',
			iconCls: 'silk-add',
            handler : function() {
				winAction = 'create';
				win.setTitle('Создать колонку');
				win.show();
            }
        },{
        	text: 'Номера и цены',
        	iconCls: 'silk-money',
        	handler : function() {
				if (store.getCount() == 0){
					Ext.confpopup.msg('Перед тем как заносить цены на номера создайте хотя бы одну колонку с датами', '');
				} else {
					if (!firstOpen && document.getElementById('winPanelId')) {
						document.getElementById('winPanelId').src = iframeUrl;
					}
					firstOpen = false;
	    			winPanel.show();
				}
            }
		}],
		
		sm: new Ext.grid.RowSelectionModel({singleSelect:true})
    });
	
	Ext.apply(Ext.grid.GridView.prototype, {
		sortAscText  : "Сортировать по возрастанию",
    	sortDescText : "Сортировать по убыванию",
    	lockText     : "Закрепить столбец",
    	unlockText   : "Снять закрепление столбца",
    	columnsText  : "Столбцы"
  	});

	datesForm = new Ext.form.FormPanel({
		title: "My Form",
		labelWidth: 150,
		labelAlign: "left",
		layout: "form",
		titleCollapse: false,
		header: false,
		frame: true,
		border: false,
		animCollapse: true,
		hideBorders: false,
		items: [{
	            layout:'column',
	            items:[{
	                columnWidth:.5,
	                layout: 'form',
	                items: [<?php for ($i = 0; $i < $maxDateFields; $i++) {?>{
	                	fieldLabel: 'Дата начала',
	                	xtype: 'datefield',<?php if ($i == 0) {
	                	echo 'allowBlank:false,';	
        				} ?>name: 'dateStart[]',
						format: 'd/m/Y',
	                    anchor:'95%'
	                }<?php if ($i != $maxDateFields - 1) { ?>,<?php }?><?php }?>]
	            },{
	                columnWidth:.5,
	                layout: 'form',
	                items: [<?php for ($i = 0; $i < $maxDateFields; $i++) {?>{
	                	fieldLabel: 'Дата окончания',
	                	xtype: 'datefield',<?php if ($i == 0) {
						echo 'allowBlank:false,';	
						} ?>name: 'dateEnd[]',
						format: 'd/m/Y',
	                    anchor:'95%'
	                }<?php if ($i != $maxDateFields - 1) { ?>,<?php }?><?php }?>]
	            }]
		}],
		buttons: [{
			xtype: "button",
			text: "Сохранить",
			type: "submit",
			handler: function() {
				if (winAction == 'create') {
					var fp = this.ownerCt.ownerCt, form = fp.getForm();
					if (form.isValid()) {
						form.submit({
							url: '/admin/hoteldates/groupadd/hotelId/' + hotelId,
							success: function(form, action){
								form.reset();
								win.hide();
								store.reload();
								Ext.confpopup.msg('Колонка добавлена', '');
							}
						});
					}
				} else if (winAction == 'edit') {
					var fp = this.ownerCt.ownerCt, form = fp.getForm();
					if (form.isValid()) {
						form.submit({
							url: '/admin/hoteldates/add/hotelId/' + hotelId + '/groupId/' + winGroupId,
							success: function(form, action){
								form.reset();
								win.hide();
								store.reload();
								Ext.confpopup.msg('Даты добавлены', '');
							}
						});
					}
				}
			}
		}, {
			xtype: "button",
			text: "Отмена",
			handler: function(){
				var fp = this.ownerCt.ownerCt, form = fp.getForm();
				form.reset();
				win.hide();
			}
		}]
	});

  	win = new Ext.Window({
		title: "Создать колонку",
		closable: false,
		width: 600,
		height: 350,
		resizable: false,
		plain: false,
		padding: "15",
		constrain: false,
		hideCollapseTool: false,
		footer: false,
		shadow: true,
		bodyBorder: false,
		items: [datesForm]
	});

	win.on('beforeshow', function (obj) {
		Ext.get('msg-div-casper').slideIn();
	});
	
	win.on('beforehide', function (obj) {
		Ext.get('msg-div-casper').slideOut();
	});

	Ext.DomHelper.insertFirst(document.body, {id:'msg-div-casper', cls:'ext-el-mask'}, true);

    store.load({params:{hotelId: hotelId}});
	grid.render('hotelgrid');
});

function deleteDate(id)
{
	Ext.MessageBox.buttonText.yes = 'Да';
	Ext.MessageBox.buttonText.no  = 'Нет';		
	Ext.MessageBox.confirm('Предупреждение!', 'Вы действительно хотите удалить дату?', function (btn) {
		if (btn == 'yes') {
			Ext.Ajax.request({
   				url: '/admin/hoteldates/delete/id/' + parseInt(id) + '/',
   				success: function() {
					Ext.confpopup.msg('Дата удалена', '');
					store.reload();
				},
   				failure: function() {},
				disableCaching: false
			});
		}
	});
}

function deleteGroup(id)
{
	Ext.MessageBox.buttonText.yes = 'Да';
	Ext.MessageBox.buttonText.no  = 'Нет';		
	Ext.MessageBox.confirm('Предупреждение!', 'Вы действительно хотите удалить колонку с датами? (при удалении удалятся все связные данные)', function (btn) {
		if (btn == 'yes') {
			Ext.Ajax.request({
   				url: '/admin/hoteldates/groupdelete/id/' + parseInt(id) + '/',
   				success: function() {
					Ext.confpopup.msg('Колонка удалена', '');
					store.reload();
				},
   				failure: function() {},
				disableCaching: false
			});
		}
	});	
}

function getClientHeight()
{
	return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}
</script>